#include "Sierpinski.h"

Sierpinski::Sierpinski(Point2f a, Point2f b, Point2f c, unsigned int numero)
{
    this->a = a;
    this->b = b;
    this->c = c;
    this->numero = numero;
}

void Sierpinski::draw()
{
    this->draw_recursivo(this->a,this->b,this->c,this->numero);
}

Point2f Sierpinski::pontoMedio(Point2f p1, Point2f p2)
{
    Point2f ponto_medio( (p1.x+p2.x)/2.0 , (p1.y+p2.y)/2.0 );
    return(ponto_medio);
}

void Sierpinski::draw_recursivo(Point2f a, Point2f b, Point2f c, unsigned int numero)
{
    if (numero == 0) return;

    // Desenha o triangulo exterior:
    glBegin(GL_LINE_LOOP);
        glVertex2f(a.x,a.y);
        glVertex2f(b.x,b.y);
        glVertex2f(c.x,c.y);
    glEnd();

    // Desenha os 3 triangulos internos:
    this->draw_recursivo(a,pontoMedio(a,b),pontoMedio(a,c),numero-1);
    this->draw_recursivo(b,pontoMedio(b,a),pontoMedio(b,c),numero-1);
    this->draw_recursivo(c,pontoMedio(c,b),pontoMedio(c,a),numero-1);
}
